#include <stdio.h>

int main(int argc, char const *argv[])
{
    //打开文件流
    FILE *file = fopen("io.txt", "a+");
    if (file == NULL)
    {
        printf("打开文件失败\n");
    }
    else
    {
        printf("打开文件成功\n");
    }

// //读字符
// /**
//  * 作用：读取文件中的一个字符
//  * 参数：文件流
//  * 返回值：成功：得到字符的数值，文件结尾或失败：EOF
//  * 
//  * int fgetc (FILE *__stream);
//  * */
//     int fgetc_result = fgetc(file);
//     if (fgetc_result == EOF)
//     {
//         printf("读取文件字符失败\n");
//     }
//     else
//     {
//         printf("读取文件字符成功：%c\n",fgetc_result);
//     }


// //读字符串
// /**
//  * 作用：读取文件中的字符串（指定长度）
//  * 参数1：接收读取数据的字符数组
//  * 参数2：读取的长度
//  * 参数3：文件流
//  * 返回值：
//  *  成功：读取的字符串   当读取到换行会自动结束返回
//  *  文件末尾或失败：NULL
//  * 
//  * char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
//  * */
//     char buffer[50] = {0};
//     while (fgets(buffer, sizeof(buffer), file))
//     {
//         printf("%s",buffer);
//     }
     

//读 格式化字符串
/**
 * 作用：读取文件中的一行字符串，格式化到n个变量中
 * 参数1：文件流
 * 参数2：带点位的字符串（匹配要读取的字符串）
 * 参数...：用于接收匹配占位数据的n个变量指针
 * 返回值：成功：点位的个数，失败或结束返回EOF
 * 
 * int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...)
 * */
    char boy[20] = {0};
    char girl[20];
    int age;
    while (fscanf(file, "%s %s %d", boy, girl, &age) != EOF)
    {
        printf("%s在%d爱上%s\n", boy, age, girl);
    }
    

    //关闭文件流
    int result = fclose(file);
    if (result == EOF)  //-1
    {
        printf("关闭文件失败\n");
    }
    else
    {
        printf("关闭文件成功\n");
    }
     
}